Join über gleiche Tabelle
Normalerweise verwendet man einen Join, um mehrere Tabellen miteinander zu verbinden. Man kann ihn jedoch dazu missbrauchen, um unterschiedliche Einträge der gleichen Tabelle zu selektieren!
Ein Anwendungsbeispiel wäre dieses hier: Sie haben einen Fertigungsauftrags und möchten alle Aufträge selektieren, die freigegeben und gedruckt sind.
In der Tabelle JEST steht der Status zum Objekt “Auftrag”. Dabei stehen hier nicht die sprachspezifischen vierstelligen Kürzel FREI und DRUC, sondern die internen Bezeichner I0002 und I0007. Die Umsetzung steht in Tabelle TJ02.
Mithilfe des Alias-Zusatzes beim Join können wir die gleiche Tabelle unter verschiedenen Namen ansprechen:
SELECT aufk~aufnr aufk~objnr INTO TABLE lt_aufnr FROM aufk INNER JOIN jest AS s_frei ON aufk~objnr = s_frei~objnr INNER JOIN jest AS s_druc ON aufk~objnr = s_druc~objnr WHERE aufk~auart = 'ZV01' AND s_frei~stat = 'I0002' AND s_frei~inact = space AND s_druc~stat = 'I0007' AND s_druc~inact = space. IF sy-subrc = 0. WRITE: / sy-dbcnt, 'Aufträge mit Status FREI DRUC gefunden'. ELSE. WRITE: / 'Keine Aufträge gefunden mit Status FREI DRUC'. ENDIF.
Hinweis:
In diesem speziellen Beispiel müssen Sie allerdings vorsichtig sein! Sie können den Fall nicht umkehren und alle freigegebenen Aufträge suchen, die noch nicht gedruckt wurden! In dem Fall ist nämlich der Status I0007-DRUC nicht zwingend in der Tabelle JEST vorhanden!
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024